#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

const int N = 10;
ll dp[N][N][N][N];
// dp[i][j][k][l];
// 表示两条路同时走，第一条路径走到(i, j)时，第二条走到（k, l）时的最大数字和；
int g[N][N];

//取上上，左左，上左，左上四个方向的最大值加上当前的值；
// 当i == k && j == l时，dp[i][j][k][l] = max(dp[i - 1][j][k - 1][l], dp[i][j - 1][k][l - 1], dp[i - 1][j][k][l - 1], dp[i][j - 1][k - 1][l]) + g[i][j];
//取上上，左左，上左，左上四个方向的最大值加上两条路径当前的值；
// 当i != k && j != l时，dp[i][j][k][l]= max(dp[i - 1][j][k - 1][l], dp[i][j - 1][k][l - 1], dp[i - 1][j][k][l - 1], dp[i][j - 1][k - 1][l]) + g[i][j] + g[k][l];
int main()
{
    int n;
    cin >> n;

    int a, b, c;
    while (cin >> a >> b >> c, a && b && c)
        g[a][b] = c;

    for (int i = 1; i <= n; i ++)
        for (int j = 1; j <= n; j ++)
            for (int k = 1; k <= n; k ++)
                for (int l = 1; l <= n; l ++)
                {
                    int t1 = max(dp[i - 1][j][k - 1][l], dp[i][j - 1][k][l - 1]); // (上, 上)、(左, 左)两个方向
                    int t2 = max(dp[i][j - 1][k - 1][l], dp[i - 1][j][k][l - 1]); // (上, 左)、(左, 上)两个方向
                    dp[i][j][k][l] = max(t1, t2) + g[i][j];
                    if(i != k && j != l) dp[i][j][k][l] += g[k][l];
                }
    
   
    cout << dp[n][n][n][n] << endl;
    return 0;
}